/**
 * 数据库初始化脚本
 * 用于创建数据库表结构和插入初始数据
 */

const { db, closeDatabase } = require('./db');
const bcrypt = require('bcrypt');

// 等待数据库表创建完成后插入初始数据
setTimeout(() => {
  console.log('开始插入初始数据...');

  // 插入管理员用户
  const saltRounds = 10;
  bcrypt.hash('admin123', saltRounds, (err, hash) => {
    if (err) {
      console.error('密码加密失败:', err);
      return;
    }

    db.run(`
      INSERT OR IGNORE INTO users (username, password, role)
      VALUES ('admin', ?, 'admin')
    `, [hash], function(err) {
      if (err) {
        console.error('插入管理员用户失败:', err.message);
      } else if (this.changes > 0) {
        console.log('管理员用户创建成功');
      } else {
        console.log('管理员用户已存在');
      }
    });
  });

  // 插入示例教师用户
  bcrypt.hash('teacher123', saltRounds, (err, hash) => {
    if (err) {
      console.error('密码加密失败:', err);
      return;
    }

    db.run(`
      INSERT OR IGNORE INTO users (username, password, role)
      VALUES ('teacher1', ?, 'teacher')
    `, [hash], function(err) {
      if (err) {
        console.error('插入教师用户失败:', err.message);
      } else if (this.changes > 0) {
        const userId = this.lastID;
        console.log('教师用户创建成功, ID:', userId);

        // 插入教师信息
        db.run(`
          INSERT OR IGNORE INTO teachers (teacher_id, name, gender, title, department, user_id)
          VALUES ('T2023001', '张教授', '男', '教授', '计算机科学系', ?)
        `, [userId], function(err) {
          if (err) {
            console.error('插入教师信息失败:', err.message);
          } else if (this.changes > 0) {
            console.log('教师信息创建成功');
          } else {
            console.log('教师信息已存在');
          }
        });
      } else {
        console.log('教师用户已存在');
      }
    });
  });

  // 插入示例学生用户
  bcrypt.hash('student123', saltRounds, (err, hash) => {
    if (err) {
      console.error('密码加密失败:', err);
      return;
    }

    db.run(`
      INSERT OR IGNORE INTO users (username, password, role)
      VALUES ('student1', ?, 'student')
    `, [hash], function(err) {
      if (err) {
        console.error('插入学生用户失败:', err.message);
      } else if (this.changes > 0) {
        const userId = this.lastID;
        console.log('学生用户创建成功, ID:', userId);

        // 插入学生信息
        db.run(`
          INSERT OR IGNORE INTO students (student_id, name, gender, age, class, department, major, user_id)
          VALUES ('S2023001', '李同学', '男', 20, '计算机2班', '信息学院', '计算机科学与技术', ?)
        `, [userId], function(err) {
          if (err) {
            console.error('插入学生信息失败:', err.message);
          } else if (this.changes > 0) {
            console.log('学生信息创建成功');
          } else {
            console.log('学生信息已存在');
          }
        });
      } else {
        console.log('学生用户已存在');
      }
    });
  });

  // 插入示例课程
  setTimeout(() => {
    db.get(`SELECT id FROM teachers WHERE teacher_id = 'T2023001'`, (err, teacher) => {
      if (err) {
        console.error('查询教师失败:', err.message);
        return;
      }

      if (teacher) {
        const teacherId = teacher.id;

        // 插入示例课程
        db.run(`
          INSERT OR IGNORE INTO courses (course_id, name, credit, hours, description, max_students, teacher_id, semester)
          VALUES ('C2023001', '数据结构', 4, 64, '计算机科学基础课程，学习各种数据结构及其应用', 40, ?, '2023-2024-1')
        `, [teacherId], function(err) {
          if (err) {
            console.error('插入课程失败:', err.message);
          } else if (this.changes > 0) {
            const courseId = this.lastID;
            console.log('课程创建成功, ID:', courseId);

            // 插入课程时间表
            db.run(`
              INSERT INTO course_schedules (course_id, day_of_week, start_time, end_time, classroom)
              VALUES (?, 2, '08:00', '09:40', '教学楼A-101')
            `, [courseId], function(err) {
              if (err) {
                console.error('插入课程时间表失败:', err.message);
              } else {
                console.log('课程时间表创建成功');
              }
            });

            db.run(`
              INSERT INTO course_schedules (course_id, day_of_week, start_time, end_time, classroom)
              VALUES (?, 4, '14:00', '15:40', '教学楼A-101')
            `, [courseId], function(err) {
              if (err) {
                console.error('插入课程时间表失败:', err.message);
              } else {
                console.log('课程时间表创建成功');
              }
            });
          } else {
            console.log('课程已存在');
          }
        });

        db.run(`
          INSERT OR IGNORE INTO courses (course_id, name, credit, hours, description, max_students, teacher_id, semester)
          VALUES ('C2023002', '计算机网络', 3, 48, '学习计算机网络基础知识和协议', 45, ?, '2023-2024-1')
        `, [teacherId], function(err) {
          if (err) {
            console.error('插入课程失败:', err.message);
          } else if (this.changes > 0) {
            console.log('课程创建成功');
          } else {
            console.log('课程已存在');
          }
        });
      }
    });
  }, 1000);

  // 等待所有数据插入完成后关闭数据库连接
  setTimeout(() => {
    console.log('数据库初始化完成');
    closeDatabase();
  }, 3000);
}, 1000);

console.log('数据库初始化脚本正在运行...');
